/**
 *第三方登录
 */
import { mapActions } from 'vuex';
import { postAction } from '@/api/manage';
import { timeFix } from '@/utils/util';

export const JeecgThirdLoginMixin = {
  data() {
    return {
      //第三方登录相关信息
      thirdLoginInfo: '',
      thirdPasswordShow: false,
      thirdLoginPassword: '',
      thirdLoginUser: '',
      thirdConfirmShow: false,
      thirdCreateUserLoding: false,
      thirdLoginState: false,
      //绑定手机号弹窗
      bindingPhoneModal: false,
      thirdPhone: '',
      thirdCaptcha: '',
      //获取验证码按钮30s之内是否可点击
      thirdState: {
        time: 30,
        smsSendBtn: false,
      },
      //第三方用户UUID
      thirdUserUuid: '',
      thirdType: '',
      url: {
        bindingThirdPhone: '/sys/thirdLogin/bindingThirdPhone',
      },
    };
  },
  created() {},
  methods: {
    ...mapActions(['ThirdLogin']),
    //第三方登录
    onThirdLogin(source) {
      let url = window._CONFIG['domianURL'] + `/sys/thirdLogin/render/${source}`;
      window.open(
        url,
        `login ${source}`,
        'height=500, width=500, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no'
      );
      let that = this;
      that.thirdType = source;
      that.thirdLoginInfo = '';
      that.thirdLoginState = false;
      let receiveMessage = function (event) {
        let token = event.data;
        if (typeof token === 'string') {
          //如果是字符串类型 说明是token信息
          if (token === '登录失败') {
            that.$message.warning(token);
          } else if (token.includes('绑定手机号')) {
            that.bindingPhoneModal = true;
            let strings = token.split(',');
            that.thirdUserUuid = strings[1];
          } else {
            that.doThirdLogin(token);
          }
        } else if (typeof token === 'object') {
          //对象类型 说明需要提示是否绑定现有账号
          if (token['isObj'] === true) {
            that.thirdConfirmShow = true;
            that.thirdLoginInfo = { ...token };
          }
        } else {
          that.$message.warning('不识别的信息传递');
        }
      };
      window.addEventListener('message', receiveMessage, false);
    },
    // 根据token执行登录
    doThirdLogin(token) {
      if (this.thirdLoginState === false) {
        this.thirdLoginState = true;
        let param = {};
        param.thirdType = this.thirdType;
        param.token = token;
        this.ThirdLogin(param).then(res => {
          if (res.success) {
            this.loginSuccess();
          } else {
            this.requestFailed(res);
          }
        });
      }
    },
    // 绑定已有账号 需要输入密码
    thirdLoginUserBind() {
      this.thirdLoginPassword = '';
      this.thirdLoginUser = this.thirdLoginInfo.uuid;
      this.thirdConfirmShow = false;
      this.thirdPasswordShow = true;
    },
    //创建新账号
    thirdLoginUserCreate() {
      this.thirdCreateUserLoding = true;
      // 账号名后面添加两位随机数
      this.thirdLoginInfo['suffix'] = parseInt(Math.random() * 98 + 1);
      //this.thirdLoginInfo.operateCode = 123 //测试校验失败
      postAction('/sys/third/user/create', this.thirdLoginInfo)
        .then(res => {
          if (res.success) {
            let token = res.result;
            console.log('thirdCreateNewAccount', token);
            this.doThirdLogin(token);
            this.thirdConfirmShow = false;
          } else {
            this.$message.warning(res.message);
          }
        })
        .finally(() => {
          this.thirdCreateUserLoding = false;
        });
    },
    // 核实密码
    thirdLoginCheckPassword() {
      //this.thirdLoginInfo.operateCode = 123 //测试校验失败
      let param = Object.assign({}, this.thirdLoginInfo, { password: this.thirdLoginPassword });
      postAction('/sys/third/user/checkPassword', param).then(res => {
        if (res.success) {
          this.thirdLoginNoPassword();
          this.doThirdLogin(res.result);
        } else {
          this.$message.warning(res.message);
        }
      });
    },
    // 没有密码 取消操作
    thirdLoginNoPassword() {
      this.thirdPasswordShow = false;
      this.thirdLoginPassword = '';
      this.thirdLoginUser = '';
    },
    //获取第三方验证码
    getThirdCaptcha() {
      let that = this;
      if (!this.thirdPhone) {
        that.cmsFailed('请输入手机号');
      } else {
        this.thirdState.smsSendBtn = true;
        let interval = window.setInterval(() => {
          if (that.thirdState.time-- <= 0) {
            that.thirdState.time = 30;
            that.thirdState.smsSendBtn = false;
            window.clearInterval(interval);
          }
        }, 1000);
        const hide = this.$message.loading('验证码发送中..', 0);
        let smsParams = {};
        smsParams.mobile = this.thirdPhone;
        smsParams.smsmode = '1';
        postAction('/sys/sms', smsParams)
          .then(res => {
            if (!res.success) {
              setTimeout(hide, 0);
              this.cmsFailed(res.message);
            }
            setTimeout(hide, 500);
          })
          .catch(err => {
            setTimeout(hide, 1);
            clearInterval(interval);
            that.thirdState.time = 30;
            that.thirdState.smsSendBtn = false;
            this.requestFailed(err);
          });
      }
    },
    //绑定手机号点击确定按钮
    thirdHandleOk() {
      let bingingParams = {};
      bingingParams.mobile = this.thirdPhone;
      bingingParams.captcha = this.thirdCaptcha;
      bingingParams.thirdUserUuid = this.thirdUserUuid;
      postAction(this.url.bindingThirdPhone, bingingParams).then(res => {
        if (res.success) {
          this.bindingPhoneModal = false;
          this.doThirdLogin(res.result);
        } else {
          this.$message.warning(res.message);
        }
      });
    },
    loginSuccess() {
      // update-begin- author:sunjianlei --- date:20190812 --- for: 登录成功后不解除禁用按钮，防止多次点击
      // this.loginBtn = false
      // update-end- author:sunjianlei --- date:20190812 --- for: 登录成功后不解除禁用按钮，防止多次点击
      this.$router.push({ path: '/dashboard/analysis' }).catch(() => {
        console.log('登录跳转首页出错,这个错误从哪里来的');
      });
      this.$notification.success({
        message: '欢迎',
        description: `${timeFix()}，欢迎回来`,
      });
    },
    cmsFailed(err) {
      this.$notification['error']({
        message: '登录失败',
        description: err,
        duration: 4,
      });
    },
    requestFailed(err) {
      this.$notification['error']({
        message: '登录失败',
        description: ((err.response || {}).data || {}).message || err.message || '请求出现错误，请稍后再试',
        duration: 4,
      });
      this.loginBtn = false;
    },
  },
};
